import { fileURLToPath, URL } from "node:url"

import { defineConfig, loadEnv } from 'vite'
import createVitePlugins from './vite/index.js'
import postCssPxToRem from 'postcss-pxtorem'

export default defineConfig(({mode, command}) => {
    const envDir = 'env'
    const env = loadEnv(mode, process.cwd() + '/' + envDir)
    return {
        cacheDir: 'node_modules/.vite', // 缓存目录
        envDir: envDir, // 环境变量目录
        plugins: createVitePlugins(env, command === 'build'),
        base: env.VITE_APP_ENV === 'production' ? './' : '/',
        resolve: {
            alias: {
                // 设置路径
                '~': fileURLToPath(new URL("./", import.meta.url)),
                // 设置别名
                "@": fileURLToPath(new URL("./src", import.meta.url)),
            }
        },
        // vite 相关配置
        server: {
            port: 1025,
            host: true,
            // 启动时自动在浏览器打开
            open: false,
            // 允许任何域
            // cors:true,
            proxy: {
                [env.VITE_APP_BASE_API]: {
                    target: env.VITE_APP_API_URL,
                    changeOrigin: true,
                    rewrite: ((p) => p.replace(new RegExp(env.VITE_APP_BASE_API + '/'), '/'))
                }
            }
        },
        // 打包配置
        build: {
            //生产环境中，关闭 Source Map 可以显著提高打包速度
            sourcemap: false,
            rollupOptions: {
                output: {
                    // 启用最小化内部导出名称 优化构建输出文件大小
                    minifyInternalExports: true,
                    // 启用压缩混淆 压缩代码
                    compact: true,
                    // 最小化拆分包 按需加载 js,每个页面的 js 逻辑
                    manualChunks(id) {
                        if (id.includes('node_modules')) id.toString().split('node_modules/')[1].split('/')[0].toString()
                    },
                    // 引入文件名的名称
                    chunkFileNames: 'js/[name]-[hash].js',
                    // 包的入口文件名称
                    entryFileNames: 'js/[name]-[hash].js',
                    // 资源文件像 字体，图片等
                    assetFileNames: '[ext]/[name]-[hash].[ext]',
                }
            },
        },
        css: {
            preprocessorOptions: {
                scss: {
                    // 静默弃用警告
                    silenceDeprecations: ['legacy-js-api']
                },
            },
            postcss: {
                plugins: [
                    // 将px单位转换为rem单位
                    postCssPxToRem({
                        // 根元素字体大小
                        rootValue: 16,
                        // 需要转换的属性列表
                        propList: ['*']
                    })
                ]
            }
        }
    }
})
